package com.ftg.learn.lesson2;

import com.ftg.learn.lesson3.LearnDoubleLoop01;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * 学习一下运算符
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/6/1 下午1:30
 */
public class LearnOptions01 {

    public static void main(String[] args) {
        int a = 9;
        int b = 13;
        System.out.println(a + b);
        System.out.println(2.0 - 1.1);
        //c c ++

//        银行  金额 高精度运算时 基本类型 (误差)
//        java 专门为银行设计的类
//        BigInteger > int integer
//        BigDecimal aBig = new BigDecimal("2.0");
//        BigDecimal bBig = new BigDecimal("1.1");
//        System.out.println(aBig.subtract(bBig));

        System.out.println(3 / 2);
        System.out.println(3.0 / 2);

        System.out.println(2 % 3);


        int c = 13;

        int d = c++;

        System.out.println( c++ );
        System.out.println( c );
        System.out.println( ++c );
        System.out.println( d );
        System.out.println(a++ + ++b);
//        System.out.println(a);

        System.out.println('a' > 'b');

        int aint = 1;

        int bint = 2;
        //与  条件同时为真  真真为真
//        System.out.println(aint > bint && aint++ < 3);
//        System.out.println(aint);

        //或 条件一真为真 假假为假
        System.out.println(!(aint < bint) | aint++ < 3);
        System.out.println(aint);

        System.out.println(!false);

        //异或  求不同
        System.out.println(true ^ true);
        System.out.println(false ^ true);
        System.out.println(true ^ false);
        System.out.println(false ^ false);

        //10 分钟 git 上传

        /**
         * 位非  ~
         * 我们的数字转换成为二进制  然后按位 取反
         * 采用补码运算
         *  ex : 3  int
         *  原码  ---> 反码  ---> + 1补码  -->-1 反码  -->取反 原码
         *
         *  正整数
         *  原码、反码、补码相同。
         *  原码 0000 0011
         *  反码 0000 0011
         *  补码 0000 0011
         *  按（二进制）位取反，即把所有二进制位（包括符号位）中数字，1变成0，0变成1。
         *  ～ 3
         *  取反
         *  1111 1100  补码
         *  -1
         *  1111 1011  反码
         *  1000 0100  原码 (反码转换成原码的时候符号)
         *
         *
         * 0 10
         * ~
         * 1 01 补码
         * -1
         * 1 00
         * 1 11
         *
         * 0 0000001
         * 1 1111110
         * 1 1111101
         * 1 0000010
         *
         * 原码
         * 11111111
         * 反码
         * 00000000
         * 补码
         * 00000001
         * ~
         * 11111110
         * 反 -1
         * 11111101
         * 原码
         * 00000010 (输出)
         *
         *
         *
         */
        System.out.println(~3);
        System.out.println(~2);
        System.out.println(~1);
        System.out.println(~-3);
        System.out.println(~78);
        System.out.println(~0);
        LearnDoubleLoop01.printManyLine(5);
    }

}
